// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程：https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
const uniID = require('uni-id-common')
const utils = require('uni-utils')
module.exports = {
	_before: function () { // 通用预处理器
		const methodName = this.getMethodName()
		if(['getAccout', 'addAccount', 'updateAccount', 'deleteAccount'].includes(methodName) && !this.getUniIdToken()) {
			throw new Error('token不存在')
		}
		const clientInfo = this.getClientInfo()
		this.uniIDIns = uniID.createInstance({ // 创建uni-id实例，其上方法同uniID
			clientInfo
		})
		this.unicloud = uniCloud.database()
	},
	/**
	 * 获取账户列表
	*/
	getAccout() {
		return new Promise((resolve) => {
			utils.isCheckToken(this.uniIDIns, this.getUniIdToken()).then(res => {
				console.log(res);
				return this.unicloud.collection('account').where({ userId: res.uid }).get()
			}).then(res => {
				resolve({ code: 200, data: res.data, msg: '操作成功' })
			}).catch(c => utils.captureCatch(c, resolve))
		})
	},
	/**
	 * 添加账户信息
	 * @param { string } userId 用户Id
	 * @param { string } accountName 账户名称
	 * @param { string } accountType 账户性质
	 * @param { string } quotaUp 额度上限
	 * @param { string } balance 余额
	 * @param { string } paid 待还金额
	 * @param { string } paidTime 待还时间
	*/
	addAccount(data) {
		return new Promise((resolve) => {
			utils.isCheckToken(this.uniIDIns, this.getUniIdToken()).then(res => {
				data.createTime = utils.parseTime(new Date())
				return this.unicloud.collection('account').add(data)
			}).then(res => {
				resolve({ code: 200, msg: '操作成功' })
			}).catch(c => utils.captureCatch(c, resolve))
		})
	},
	/**
	 * 更新账户信息
	 * @param { string } _id 账户Id
	 * @param { string } userId 用户Id
	 * @param { string } accountName 账户名称
	 * @param { string } accountType 账户性质
	 * @param { string } quotaUp 额度上限
	 * @param { string } balance 余额
	 * @param { string } paid 待还金额
	 * @param { string } paidTime 待还时间
	*/
	updateAccount(data) {
		return new Promise((resolve) => {
			utils.isCheckToken(this.uniIDIns, this.getUniIdToken()).then(res => {
				const obj = {}
				for (let key in data) {
					if(!['userId', '_id'].includes(key)) {
						obj[key] = data[key]
					}
				}
				return this.unicloud.collection('account').where({ _id: data._id }).update(obj)
			}).then(res => {
				resolve({ code: 200, msg: '操作成功' })
			}).catch(c => utils.captureCatch(c, resolve))
		})
	},
	/**
	 * 删除账户信息
	 * @param { string } _id 主键id
	*/
	deleteAccount(_id) {
		return new Promise((resolve) => {
			utils.isCheckToken(this.uniIDIns, this.getUniIdToken()).then(res => {
				return this.unicloud.collection('account').where({ _id }).remove()
			}).then(res => {
				resolve({ code: 200, msg: '操作成功' })
			}).catch(c => utils.captureCatch(c, resolve))
		})
	}
	/**
	 * method1方法描述
	 * @param {string} param1 参数1描述
	 * @returns {object} 返回值描述
	 */
	/* 
	method1(param1) {
		// 参数校验，如无参数则不需要
		if (!param1) {
			return {
				errCode: 'PARAM_IS_NULL',
				errMsg: '参数不能为空'
			}
		}
		// 业务逻辑
		
		// 返回结果
		return {
			param1 //请根据实际需要返回值
		}
	}
	*/
}
